define(function(require, exports){
	var pubjs	= require('pubjs');
	var view	= require('@base/view');
	var util	= require('util');
	var trigger	= require('modules/trigger');

	var Base = view.container.extend({
		init:function(config){
			config = pubjs.conf(config, {
				'tplFile':	'admin/tpl/category/edit.tpl',
				'view_model': {
					'headTitle': '分类信息'
					,'isEdit':false
					,'isSave': false
					,'parentChange': false
					,'Name': ''
					,'SourceId': ''
					,'Type': ''
					,'SN': ''
					,'BdxId': ''
					,'Info': ''
					,'Parent': ''
					,'Pid': ''
					,'vmReflesh': this.vmReflesh
				},
				urlUpdate: 'category/update',
				urlAdd: 'category/add',
				urlInfo: 'category/info'
			});

			this.$id = null;
			this.Super('init', arguments);
		}
		,afterBuild:function(){
			var self = this;

			var config = {
				// 表单取消按钮
				'cancel': {
					'value': LANG('取消'),
					'class': 'btn btn-link mr20'
				}
				// 表单保存按钮
				,'save': {
					'value': LANG('保存'),
					'class': 'btn btn-confirm'
				}
				,Pid: {
					'auto_load': false
					,'url': 'category/dwList'
					,'reqType': 'websocket'
					,'skey': 'children'
					,"def": LANG("选择对应的父类分类")
				}
				,PidTip: {
					'width': 300,
					'data': LANG('分类所属的上级分类, 如不选择则当前为第一级')
				}
				,NameTip: {
					'width': 300,
					'data': LANG('分类的显示名字')
				}
				,SourceIdTip: {
					'width': 300,
					'data': LANG('来源SourceId, 此项为必填.')
				}
				,TypeTip: {
					'width': 300,
					'data': LANG('分类的类型, 如meida app video等等')
				}
				,SNTip: {
					'width': 300,
					'data': LANG('分类所属渠道的id')
				}
				,BdxIdTip: {
					'width': 300,
					'data': LANG('Bdx 系统代表的Id, 如不填,默认与SN相等.')
				}
				,InfoTip: {
					'width': 300,
					'data': LANG('所属渠道的具体信息, 可不填, 如填必须为JSON格式的字符串!')
				}
			};

			self.buildFromTemplate(config);
		}
		,afterBuildTemplate: function() {
			var self = this;
			var vm = self.vm;
			vm.watch('SourceId', function(v) {
				self.$.Pid.setParam()
			});

		}
		,vmReflesh: function() {
			var self = this;
			var vm = self.vm.$;
			if(!vm.SourceId) {
				pubjs.alert(LANG('为了避免加载数据过大,建议先填上来源渠道'));
				return false;
			}
			var param = {
				SourceId: +vm.SourceId
			};
			if(!vm.Type) {
				pubjs.alert(LANG('为了避免加载数据过大,建议先填上分类'));
				return false;
			}
			param.Type = vm.Type;

			self.$.Pid.setParam(param).load();
		}
		,load: function(id){
			var self = this;
			self.$id = id;
			if(id){
				self.vm.$.isEdit = true;
				pubjs.loading.show();
				pubjs.mc.send(this.getConfig('urlInfo'), {id: id}, function(err, data){
					pubjs.loading.hide();
					if(err){
						pubjs.alert(err.message);
						pubjs.controller.navigate('category');
						return false;
					}
					self.setData(data);
				})
			}

			return self;
		}
		,validate: function(data){
			var vm = this.vm.$;
			if(!data.Name) {
				pubjs.alert(LANG('请输入名字'));
				return false;
			}
			if(!data.Type){
				pubjs.alert(LANG('请选择对应的类型'));
				return false;
			}
			if(!data.SourceId) {
				pubjs.alert(LANG('请输入具体的渠道'));
				return false;
			}
			if(!data.SN) {
				pubjs.alert(LANG('请输入SN'));
				return false;
			}
			if(!data.BdxId) {
				pubjs.alert(LANG('请输入BdxId'));
				return false;
			}
			if(data.Info) {
				try {
					JSON.parse(data.Info);
				}
				catch(e) {
					pubjs.alert(LANG('具体信息格式为JSON格式.'));
					return false;
				}
			}
			if(data.Pid) {
				if(this.$id && (data.Pid._id == this.$id || data.Pid.pid == this.$id)) {
					pubjs.alert(LANG('不能选择自己或自己的子类'));
					return false;
				}

				data.Pid = data.Pid._id;
			}
			return true;
		}
		,setData: function(data) {
			this.$data = data;
			var self = this
				,vm = self.vm.$;

			var fields = ['Name', 'SN', 'SourceId', 'Type', 'SN', 'BdxId', 'Info'];
			for(var i = 0; i < fields.length; i++) {
				vm[fields[i]] = data[fields[i]] || '';
			}

			if(data.Pid == 0) {
				vm.Parent = LANG('首层,没有父层');
				vm.Pid = 'javascript:void(0);';
			}
			else {
				vm.Parent = data.Parent;
				vm.Pid = '#category/edit/' + data.Pid;
			}

			return self;
		}
		,getData: function(){
			var self = this
				,data
				,vm = self.vm.$;

			data = {
				_id: self.$id
				,Name: vm.Name
				,SourceId: vm.SourceId
				,Type: vm.Type
				,SN: vm.SN
				,BdxId: vm.BdxId || vm.SN
				,Info: vm.Info
			};
			if(vm.parentChange || !vm.isEdit) {
				data.Pid = self.$.Pid.getData(true);
				data.Pid = data.Pid && data.Pid.length && data.Pid[data.Pid.length -1];
			}

			return data;
		}
		,reset: function(){
			this.$id = 0;
			this.vm.reset();
			this.$.Pid.reset();
			return this;
		}
		,save: function() {
			var self = this;
			var data = self.getData();
			var vm = self.vm.$;
			if(self.validate(data)) {
				pubjs.loading.show();
				var url = vm.isEdit ? 'urlUpdate' : 'urlAdd';
				pubjs.mc.send(self.getConfig(url), data, self.afterSave.bind(self))
			}

			return false;
		}
		,afterSave: function(err, data) {
			pubjs.loading.hide();
			if(err) {
				pubjs.alert(err.message);
				return false;
			}

			pubjs.controller.navigate('category');
		}
		,onInputClick: function(ev) {
			if(ev.name == 'save') {
				this.save();
			}
			else if(ev.name == 'cancel') {
				pubjs.controller.navigate('category');
			}
		}
	});

	exports.base = Base;
});